import sys
import os
# 导入sys模块(虽然没有显式导入，但在下面使用了sys.path)
# 将当前文件的父级目录添加到Python路径，确保可以正确导入其他模块
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import tkinter as tk  # 导入tkinter模块，用于创建GUI界面
import tkinter.ttk as ttk  # 导入ttk模块，提供更现代化的控件样式

class Mais:  # 定义主应用类
    def __init__(self):
        # 创建主窗口实例
        root = tk.Tk()
        # 设置窗口初始大小为800x600像素
        root.geometry("800x600")  # 更大的初始窗口尺寸
        # 设置窗口标题
        root.title("运维工具 v0.0.1")
        
        """
        通用字段区域
        """
        # 创建一个StringVar变量，用于存储点击的项目名称，初始值为空字符串
        self.click_item = tk.StringVar(value='')

        """
        通用样式区域
        
        """
        # 创建一个ttk样式对象
        s = ttk.Style()
        # 配置名为"1.TFrame"的样式，背景色为绿色
        s.configure("1.TFrame", background='green')
        # 定义样式配置字典
        style = ttk.Style()
        style_configs = {
            "BW.TLabel": {"foreground": "black", "background": "white"},  # 黑字白背景
            "RG.TLabel": {"foreground": "red", "background": "green"},  # 红字绿背景
            "BY.TLabel": {"foreground": "blue", "background": "yellow"}  # 蓝字黄背景
        }

        try:
            # 尝试设置窗口图标
            root.iconbitmap('static/img/logo.ico')
        except tk.TclError:
            # 如果图标文件未找到，打印提示信息并使用默认图标
            print("图标文件未找到，使用默认图标")
        
        # 批量应用样式配置
        for style_name, config in style_configs.items():
            style.configure(style_name, **config)

        # 创建一个水平分割的PanedWindow控件，用于实现左右分栏布局
        paned_window = tk.PanedWindow(root, orient=tk.HORIZONTAL, sashwidth=5, sashrelief=tk.RAISED)
        # 将PanedWindow填充整个窗口并允许扩展
        paned_window.pack(fill=tk.BOTH, expand=True)

        # 左边部分 - 固定宽度框架
        left_frame = ttk.Frame(paned_window, width=200)  # 创建左侧框架，宽度为200
        # left_frame.pack_propagate(True)  # 禁止子组件影响框架大小(已注释)
        # 将左侧框架添加到PanedWindow，设置最小宽度为200
        paned_window.add(left_frame, minsize=200)

        # 导入并创建TreeViewExample实例(左侧菜单树状视图)
        from tkinter面板.pages.左边菜单列 import TreeViewExample
        # 为click_item变量添加写入(trace)回调，当值改变时调用okk方法
        self.click_item.trace('w', self.okk)  # 监控点击结果
        # 创建TreeViewExample实例，并传入左侧框架和click_item变量进行双向绑定
        TreeViewExample(left_frame, **{
            "click_item": self.click_item  # 双向绑定点击
        })

        # 右边部分 - 填充剩余空间
        right_frame = ttk.Frame(paned_window)  # 创建右侧框架
        # 将右侧框架添加到PanedWindow，设置最小宽度为400并始终允许拉伸
        paned_window.add(right_frame, minsize=400, stretch="always")
        # 导入Notebooks类(标签页管理)
        from tkinter面板.pages.标签页管理 import Main
        # 创建Main实例，并传入右侧框架和click_item变量，然后填充整个右侧框架
        Main(right_frame, **{
            "click_item": self.click_item
        }).pack(fill='both', expand=True)
        
        # 启动主事件循环
        root.mainloop()

    def okk(self, *args):
        # 打印提示信息
        print("打印点击项目名")
        # 获取并打印click_item变量的当前值
        print(self.click_item.get())

# 创建Mais类的实例，启动应用程序
Mais()
